package com.cskaoyan.config;

import com.cskaoyan.config.shiroConfig.CustomRealm;
import com.cskaoyan.config.shiroConfig.MarketSessionManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.LinkedHashMap;

/**
 * @author stone
 * @date 2022/01/06 16:19
 */
@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    /*@Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedHeaders("*")
                .allowedOrigins("*")
                .allowedMethods("*");
    }*/

//    @Bean
//    public DefaultWebSecurityManager securityManager(WxCustomRealm customRealm,
//                                                     MarketSessionManager SessionManager) {
//        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//        // 设置认证器，如果没有设置，则采用默认的认证器 → ModularRealmAuthenticator
//        // 多账号管理体系 → 设置自定义的认证器
//        //securityManager.setAuthenticator();
//        // 设置授权器，如果没有设置，则采用默认的授权器 → ModularRealmAuthorizer
//        //securityManager.setAuthorizer();
//        // 给SecurityManager设置Realm信息 → 给默认的认证器和授权器设置Realm信息
//        securityManager.setRealm(customRealm);
//        //如果是多个realm，则使用setRealms方法
//        //securityManager.setRealms();
//
//        //securityManager.setSessionManager(shiroSessionManager);
//        return securityManager;
//    }

//    @Bean
//    public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) {
//        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
//        shiroFilterFactoryBean.setSecurityManager(securityManager);
//
//        LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
//        // /admin/auth/login这个url对应着 anon Filter → 匿名Filter
//        filterChainDefinitionMap.put("/admin/auth/login", "anon");
//        filterChainDefinitionMap.put("/admin/auth/info", "anon");
//        // admin开头的请求，都要通过认证Filter
//        filterChainDefinitionMap.put("/admin/**", "authc");
//        // 权限的配置，可以将url和对应的权限建立映射关系
//        // 还可以通过注解的方式来建议url和权限之间的映射关系 → Advisor、@RequiresPermission（Handler方法上）
//        // url和handler方法对应、权限和Handler方法对应 → url和权限对应
//        filterChainDefinitionMap.put("/admin/admin/list", "perms[admin:admin:list]");
//
//        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
//
//        return shiroFilterFactoryBean;
//    }
}
